package edu.chinasoft.spring02;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

//定义切面
@Component(value = "xiaoWu")
@Aspect
public
class XiaoWu {
    //定义切入点
    /*
        关于表达式的细节
        execution(* edu.chinasoft.spring03.XiaoMing.*(..))
        1）方法的访问范围  方法的返回值  方法的名字    方法的参数
        public void edu.chinasoft.spring03.XiaoMing.method01()
        2）方法的访问范围可以不写
        void edu.chinasoft.spring03.XiaoMing.method01()

        3）返回值类型，可以使用占位符  * ，*表示返回任何类型
        * edu.chinasoft.spring03.XiaoMing.method01()
        4）包名可以有占位符  ，*表示任何内容
         * *.*.*.XiaoMing.method01()
         *..   当前包，当前包子包，儿子包孙子等等
         * *..*.XiaoMing.method01()
         5) 类名可以用*   包下面的任何类型
        * *..*.*.method01()
         6） 方法名可以用 *   类里的任何方法
         * *..*.*.*()

         7）形参 可以用*    表示1或者多个参数
         * *..*.*.*(*)
                可以用..   表示0个 1或者多个参数
     */
    @Pointcut(value = "execution(* *..*.*.m*(..))")
    private void
    pointCutMethod() {
    }
@Before( value = "pointCutMethod()")
    public void
    start() {
        System.out.println("恐吓一下！");
    }
    @After( value = "pointCutMethod()")
    public void
    end() {
        System.out.println("不要报警！");
    }
}
